/*
 * Copyright (c) 2025 Industrial Software Feature Database
 */
package com.comac.ins.isfd.service;

import com.comac.ins.common.mybatis.core.page.TableDataInfo;
import com.comac.ins.isfd.constant.enums.IsfdBusinessDatabaseTypeEnum;
import com.comac.ins.isfd.domain.IsfdDatabaseModelConfig;
import com.comac.ins.isfd.domain.bo.IsfdDatabaseModelConfigQueryBo;
import com.comac.ins.isfd.domain.bo.IsfdDatabaseModelConfigSaveBo;
import com.comac.ins.isfd.domain.bo.IsfdDatabaseModelConfigUpgradeBo;
import com.comac.ins.isfd.domain.vo.*;
import org.springframework.core.io.Resource;

import java.util.List;
import java.util.Map;

/**
 * 数据库建模配置Service接口
 *
 * @author lj
 * @date 2025-01-16
 */
public interface IIsfdDatabaseModelConfigService {
    Boolean refresh();

    List<IsfdDatabaseModelConfigVo> allList();

    /**
     * 采集页面的卡片集合只需要父模型
     */
    TableDataInfo<IsfdDatabaseModelConfigVo> collectCardList(Integer pageNum, Integer pageSize, String modelName);

    /***
     * 卡片信息详情
     */
    IsfdDatabaseModelConfigVo collectCardDetail(Long modelId);

    /**
     * 分页查询数据库建模配置列表
     *
     * @param queryBo   查询条件
     * @return 数据库建模配置分页列表
     */
    TableDataInfo<IsfdDatabaseModelConfigVo> queryPageList(IsfdDatabaseModelConfigQueryBo queryBo);

    /**
     * 查询数据库建模配置
     *
     * @param id 主键
     * @return 数据库建模配置
     */
    IsfdDatabaseModelConfigShowVo queryById(Long id);

    /**
     * 保存数据库建模配置
     *
     * @param saveBo 数据库建模配置
     * @return 是否新增成功
     */
    Boolean saveConfig(IsfdDatabaseModelConfigSaveBo saveBo, Boolean isUpdatingConfig);

    /**
     * 升版数据库建模配置
     *
     * @param upgradeBo 数据库建模配置
     * @return 是否升版成功
     */
    Boolean upgradeConfig(IsfdDatabaseModelConfigUpgradeBo upgradeBo);

    /**
     * 获取版本列表
     *
     */
    Map<String, Long> getVersionIdMap(Long id);

    /**
     * 删除数据库建模配置
     *
     * @return 是否删除成功
     */
    Boolean deleteConfig(Long id);

    void deleteConfigByNodeId(Long nodeId);

    /**
     * 获取模型树
     *
     */
    List<IsfdDatabaseModelTreeShowVo> queryModelTreeListByNodeId(Long nodeId, Integer rootModelOnly, IsfdBusinessDatabaseTypeEnum typeEnum);

    /**
     * 获取数据库建模字段类型列表
     *
     * @return 查询结果
     */
    List<String> getFieldTypes();

    /**
     * 获取数据库建模结构化的字段清单
     */
    List<IsfdDatabaseModelConfigTableVo> getFieldTableList(Long modelId);

    Map<String, Object> getTemplate(Long modelId);

    Resource downloadTemplate(Long modelId);

    Map<String, IsfdDatabaseModelConfigFieldVo> getFieldMap(Long modelId);

    Map<String, IsfdDatabaseModelConfigFieldVo> getFieldMap(IsfdDatabaseModelConfigTableVo tableVo);

    IsfdDatabaseModelConfigVo validateModelExistence(Long ModelId);

    List<IsfdDatabaseModelConfigVo> queryListAllVersionList(Long modelId);

    List<IsfdDatabaseModelConfigVo> getAllChildrenByParentConfigId(Long parentConfigId);

    IsfdDatabaseModelConfigVo queryByIdReturnSimpleVo(Long id);

    /**
     * 找到顶级父节点
     */
    IsfdDatabaseModelConfig queryByIdReturnTopParent(Long modelId);
}
